Imports DataAccesGenerales
Imports DataAcces
Imports System.Data

Partial Class Documentos_Trabajo_Altura_Trabajo_AlturaDocumento
    Inherits System.Web.UI.Page

    Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
        ocultarPopup()
        Try
            If Not Page.IsPostBack Then
                Dim datosUsuario As New dataLogin
                Dim consGenerales As New DataAccesGenerales()
                datosUsuario = Session("Data_Login")
                Dim nidDocumento As String = Request.QueryString("nidDocumento")
                Dim nidUsuario As Long
                nidUsuario = consGenerales.usuarioObtieneNidUsuario(Session("Data_Login"))
                'Me.ctlArchivoAnexos.asignarParametros(nidUsuario, nidDocumento, 3)

                If Not nidDocumento = String.Empty Then
                    Me.ctlEncabezadoDocumento.ObtenerDocumento(CLng(nidDocumento))
                    cargarDatos()
                    cargarConsulta(CLng(nidDocumento))
                    habilitarCampos(CInt(Me.ctlEncabezadoDocumento.EstadoDocumento))
                Else
                    Me.ctlEncabezadoDocumento.EstadoDocumento = enumEstadoDeDocumento.Nuevo
                    habilitarCampos(enumEstadoDeDocumento.Nuevo)
                    'Me.ctlArchivoAnexos.eliminarArchivosLista()
                    If consGenerales.usuarioTieneElRol(nidUsuario, ?nidRol) <> 1 Then 'nidRol=nid tipo de usuario que tiene permiso para el documento
                        ctlToolBar.Visible = False
                        Me.ctlVentanaDialogo.MostrarMensaje(Controles_ctlVentanaDialogo.tipoMensaje.NoTienePermiso)
                        mensaje()
                    End If
                End If
            End If
        Catch ex As Exception
            Me.ctlVentanaDialogo.MostrarException(Controles_ctlVentanaDialogo.tipoMensaje.CargarParginaExcepcion, ex.Message)
            mensaje()
        End Try
    End Sub

#Region "Eventos"

    Protected Sub ctlToolbar_BtnNuevoClicked(ByVal sender As Object, ByVal e As System.EventArgs) Handles ctlToolBar.BtnNuevoClicked
        nuevoDocumento()
        cargarDatos()
    End Sub

    Protected Sub ctlToolbar_BtnGuardarClicked(ByVal sender As Object, ByVal e As System.EventArgs) Handles ctlToolBar.BtnGuardarClicked
        If VerificarDatos() Then
            If Me.ctlEncabezadoDocumento.EstadoDocumento = enumEstadoDeDocumento.NuevoAGuardar Then
                crearDocumento()
                If Me.ctlEncabezadoDocumento.NidDocumento <> 0 Then
                    guardarDocumento(Me.ctlEncabezadoDocumento.NidDocumento)
                End If
            Else
                guardarDocumento(Me.ctlEncabezadoDocumento.NidDocumento)
            End If
        End If
    End Sub

    Protected Sub ctlToolbar_BtnAprobarClicked(ByVal sender As Object, ByVal e As System.EventArgs) Handles ctlToolBar.BtnAprobarClicked
        Me.ctlDocumentoFirmar.Visible = True
        Me.ctlDocumentoFirmar.CodigoDocumento = Me.ctlEncabezadoDocumento.TextoCodigo
        Me.mpePopUp.Show()
    End Sub

    Protected Sub ctlToolbar_BtnEditarClicked(ByVal sender As Object, ByVal e As System.EventArgs) Handles ctlToolBar.BtnEditarClicked
        Me.ctlEncabezadoDocumento.EstadoDocumento = enumEstadoDeDocumento.NuevoAGuardar
        Me.ctlEncabezadoDocumento.NidDocumento = 0
        Me.habilitarCampos(enumEstadoDeDocumento.NuevoAGuardar)
    End Sub

    Protected Sub ctlToolbar_BtnImprimirClicked(ByVal sender As Object, ByVal e As System.EventArgs) Handles ctlToolBar.BtnImprimirClicked
        Response.Redirect("~\Documentos\Trabajo_Altura\Reporte\Trabajo_AlturaReporte.aspx?" & "nidDocumento=" & Me.ctlEncabezadoDocumento.NidDocumento)
    End Sub

    Protected Sub ctlToolbar_BtnListaClicked(ByVal sender As Object, ByVal e As System.EventArgs) Handles ctlToolBar.BtnListaClicked
        Me.ctlVentanaDialogo.Visible = True
        Me.ctlVentanaDialogo.consultarIncidencias(Me.ctlEncabezadoDocumento.NidDocumento)
        Me.mpePopUp.Show()
    End Sub

    Protected Sub ctlToolbar_BtnRechazarClicked(ByVal sender As Object, ByVal e As System.EventArgs) Handles ctlToolBar.BtnRechazarClicked
        Me.ctlDocumentoCancelar.Visible = True
        Me.mpePopUp.Show()
    End Sub

    Protected Sub ctlDocumentoCancelar_BtnCancelarDoc(ByVal sender As Object, ByVal e As System.EventArgs) Handles ctlDocumentoCancelar.BtnCancelarDoc
        Try
            If Not Me.ctlDocumentoCancelar.DescripcionCancelacion = String.Empty Then
                Dim conDoc As New DataAccesGenerales
                Dim transaccion As Byte
                transaccion = conDoc.confirmarDocumento(CInt(Me.ctlEncabezadoDocumento.NidDocumento), enumEstadoDeDocumento.Rechazado, Me.ctlDocumentoCancelar.DescripcionCancelacion, Session("Data_Login"))
                If transaccion <> DataAccesGenerales.transaccion.transaccionNoTerminada Then
                    Me.ctlEncabezadoDocumento.EstadoDocumento = enumEstadoDeDocumento.Rechazado
                    habilitarCampos(enumEstadoDeDocumento.Rechazado)
                    Me.ctlVentanaDialogo.MostrarMensaje(Controles_ctlVentanaDialogo.tipoMensaje.CancelacionExito)
                End If
            Else
                Me.ctlVentanaDialogo.MostrarMensaje(Controles_ctlVentanaDialogo.tipoMensaje.IndicarMotivoCancelacion)
            End If
        Catch ex As Exception
            Me.ctlVentanaDialogo.MostrarException(Controles_ctlVentanaDialogo.tipoMensaje.CancelacionExcepcion, ex.Message)
        End Try
        mensaje()
    End Sub

    Protected Sub ctlDocumentoFirmar_BtnFirmarDoc(ByVal sender As Object, ByVal e As System.EventArgs) Handles ctlDocumentoFirmar.BtnFirmarDoc
        If Me.ctlDocumentoFirmar.validarCertificadosAgregados() Then
            If Me.ctlDocumentoFirmar.validarExtensionLlaves() Then
                If Me.ctlDocumentoFirmar.validarContrase�a() Then
                    Try
                        firmar()
                    Catch ex As Exception
                        Me.ctlVentanaDialogo.MostrarException(Controles_ctlVentanaDialogo.tipoMensaje.FirmaExcepcion, ex.Message)
                    End Try
                Else
                    Me.ctlVentanaDialogo.MostrarMensaje(Controles_ctlVentanaDialogo.tipoMensaje.ErrorContrase�a)
                End If
            Else
                Me.ctlVentanaDialogo.MostrarMensaje(Controles_ctlVentanaDialogo.tipoMensaje.ErrorArchivosLlaves)
            End If
        Else
            Me.ctlVentanaDialogo.MostrarMensaje(Controles_ctlVentanaDialogo.tipoMensaje.ErrorArchivosLlaves)
        End If
        mensaje()
    End Sub





  Protected Sub cbxNidArea_SelectedIndexChanged(sender As Object, e As System.EventArgs) Handles cbxNidArea.SelectedIndexChanged
    
  End Sub













#End Region

#Region "Metodos"

    ''' <summary>
    ''' Metodo para cargar todos los datos requeridos para llenar el archivo
    ''' </summary>
    ''' <remarks></remarks>
    Private Sub cargarDatos()
        'Datos a cargar al inicio del documento
    End Sub

    ''' <summary>
    ''' Metodo para cargar los datos al consultar el documento previamente creado y guardado en la base de datos
    ''' </summary>
    ''' <param name="nidDocumento"> nid del documento a cargar</param>
    ''' <remarks></remarks>
    Private Sub cargarConsulta(nidDocumento As Integer)
        'Carga los datos de una consulta del documento
        Dim dTrabajo_Altura As New DataAccesTrabajo_Altura
		Dim tablaTrabajo_Altura As DataTable

		tablaTrabajo_Altura = dTrabajo_Altura.Trabajo_Altura_Consultar(Me.ctlEncabezadoDocumento.NidDocumento)

    End Sub

    ''' <summary>
    ''' Metodo para habilitar los campos dependiendo del estado actual del documento
    ''' el cual puede ser alguna de estas opciones:
    ''' Nuevo
    ''' NuevoAGuardar
    ''' PendienteDeAprobacion
    ''' Aprobado
    ''' Rechazado
    ''' Terminado
    ''' </summary>
    ''' <param name="estadoDoc"> estado del documento actualmente</param>
    ''' <remarks>El estado se obtine del control ctlEncabezadoDocumento</remarks>
    Private Sub habilitarCampos(ByVal estadoDoc As DataAccesGenerales.enumEstadoDeDocumento)
        habilitarDocumento(False)
        Select Case estadoDoc
            Case enumEstadoDeDocumento.Nuevo
                Me.ctlToolBar.habilitarBotones(enumEstadoDeDocumento.Nuevo)

            Case enumEstadoDeDocumento.NuevoAGuardar
                habilitarDocumento(True)
                Me.ctlEncabezadoDocumento.TextoCodigo = textoEcabezado.enElaboracion
                Me.ctlEncabezadoDocumento.TextoFechaCreacion = Now.Date.ToShortDateString()
                Me.ctlEncabezadoDocumento.TextoEstado = textoEcabezado.nuevo
                Dim datUsuario As New DataAccesGenerales()
                Me.ctlEncabezadoDocumento.TextoEmisor = datUsuario.usuarioObtieneNombre(Session("Data_Login"))
                Me.ctlToolBar.habilitarBotones(enumEstadoDeDocumento.NuevoAGuardar)

            Case enumEstadoDeDocumento.PendienteDeAprobacion
                Dim conDoc As New DataAccesGenerales()
                If conDoc.consultaUsuarioTienFlujoActual(Me.ctlEncabezadoDocumento.NidDocumento, Session("Data_Login")) = 1 Then
                    If conDoc.usuarioEsCreadorDocumento(Me.ctlEncabezadoDocumento.NidDocumento, Session("Data_Login")) = creadorDocumento.esUsuarioCreador Then
                        habilitarDocumento(True)
                    Else
                        habilitarDocumento(False)
                    End If
                End If
                Me.ctlToolBar.NidDocumentoValor = Me.ctlEncabezadoDocumento.NidDocumento
                Me.ctlToolBar.habilitarBotones(enumEstadoDeDocumento.PendienteDeAprobacion)

            Case enumEstadoDeDocumento.Aprobado
                Me.ctlToolBar.habilitarBotones(enumEstadoDeDocumento.Aprobado)

            Case enumEstadoDeDocumento.Rechazado
                Me.ctlToolBar.habilitarBotones(enumEstadoDeDocumento.Rechazado)

            Case enumEstadoDeDocumento.Terminado
                Me.ctlToolBar.habilitarBotones(enumEstadoDeDocumento.Terminado)
        End Select
    End Sub

    ''' <summary>
    ''' Metodo para establecer un encabezado al documento, generando una nueva clave de documento
    ''' y cambiando su estado a NuevoAGuardar
    ''' </summary>
    ''' <remarks></remarks>
    Private Sub nuevoDocumento()
        Dim datUsuario As New DataAccesGenerales()
        Me.ctlEncabezadoDocumento.TextoEmisor = datUsuario.usuarioObtieneNombre(Session("Data_Login"))
        Me.ctlEncabezadoDocumento.EstadoDocumento = enumEstadoDeDocumento.NuevoAGuardar
        Me.ctlToolBar.habilitarBotones(enumEstadoDeDocumento.NuevoAGuardar)

        Me.ctlEncabezadoDocumento.TextoCodigo = textoEcabezado.enElaboracion
        Me.ctlEncabezadoDocumento.TextoFechaCreacion = Now.Date.ToShortDateString()
        Me.ctlEncabezadoDocumento.TextoEstado = textoEcabezado.nuevo
        habilitarDocumento(True)
    End Sub

    ''' <summary>
    ''' Metodo para habilitar o desabilitar los componentes del documento
    ''' </summary>
    ''' <param name="bol_Estado">True o False</param>
    ''' <remarks></remarks>
    Private Sub habilitarDocumento(bol_Estado As Boolean)
		txtFecha_Inicio.Enabled=value
      txtFecha_Fin.Enabled=value
      cbxNidArea.Enabled=value
      txtLocalizacion.Enabled=value
      txtDescripcion.Enabled=value
      txtObservaciones.Enabled=value
      txtPersona.Enabled=value
      txtSuperintendeteObra.Enabled=value
      
    End Sub

    ''' <summary>
    ''' Metodo para insertar un nuevo documento en la base de datos
    ''' </summary>
    ''' <remarks></remarks>
    Private Sub crearDocumento()
        'Crea un documento nuevo en la base de datos
        Dim dGenerales As New DataAccesGenerales
        Dim nidEmpresa As Integer = dGenerales.UsuarioObtieneNidEmpresa(Session("Data_Login"))
        Dim nidusuario As Integer = dGenerales.usuarioObtieneNidUsuario(Session("Data_Login"))
        Dim documentoNoGuardado As Byte = 0
        Dim nidDocumento As Integer = 0
        Dim transaccionFlujo As Byte = 0 ' Crea flujo documento 

        Try
            nidDocumento = dGenerales.insertaEncabezadoDocumento(enumTipoDocumento.Trabajo_Altura, nidEmpresa, nidusuario) ' Crea encabezado documetno
            If nidDocumento <> transaccion.transaccionNoTerminada Then
                transaccionFlujo = dGenerales.insertaFlujoDocumento(nidDocumento, enumTipoDocumento.Trabajo_Altura, nidusuario)
                If transaccionFlujo <> transaccion.transaccionNoTerminada Then ' Crea flujo documento detalle
                    Me.ctlEncabezadoDocumento.NidDocumento = nidDocumento
                    ctlEncabezadoDocumento.ObtenerDocumento(nidDocumento)
                    Me.ctlEncabezadoDocumento.EstadoDocumento = enumEstadoDeDocumento.PendienteDeAprobacion
                    Me.ctlToolBar.NidDocumentoValor = nidDocumento
                    Me.ctlToolBar.habilitarBotones(enumEstadoDeDocumento.PendienteDeAprobacion)
                End If
            End If
        Catch ex As Exception
            Me.ctlVentanaDialogo.MostrarException(Controles_ctlVentanaDialogo.tipoMensaje.CrearDocumentoExcepcion, ex.Message)
            mensaje()
        End Try
    End Sub

    ''' <summary>
    ''' Metodo para guardar el archivo creado en la base de datos
    ''' pasando como parametros el nid del documento 
    ''' </summary>
    ''' <param name="nidDocumento">nid del documento actual</param>
    ''' <remarks>el nid documento se obtiene del control ctlEncabezadoDocumento</remarks>
    Private Sub guardarDocumento(nidDocumento As Integer)
        Dim transaccion As Byte = 0
        Dim str_Mensaje As String = ""
        Dim dTrabajo_Altura As New DataAccesTrabajo_Altura
	    Dim pnidDocumento As Long
		Dim pfecha_Inicio As String
		Dim pfecha_Fin As String
		Dim pnidArea As Integer
		Dim plocalizacion As String
		Dim pdescripcion As String
		Dim pobservaciones As String
		Dim ppersona As String
		Dim psuperintendeteObra As 
		

        Try
            transaccion = dTrabajo_Altura.Trabajo_Altura_InsertarModificar(pnidDocumento, pfecha_Inicio, pfecha_Fin, pnidArea, plocalizacion, pdescripcion, pobservaciones, ppersona, psuperintendeteObra)
            If transaccion = 1 Then
                Me.ctlVentanaDialogo.MostrarMensaje(Controles_ctlVentanaDialogo.tipoMensaje.GuardarExito)
            Else
                Me.ctlVentanaDialogo.MostrarMensaje(Controles_ctlVentanaDialogo.tipoMensaje.GuardarError)
            End If
        Catch ex As Exception
            Me.ctlVentanaDialogo.MostrarException(Controles_ctlVentanaDialogo.tipoMensaje.GuardarExcepcion, ex.Message)
        End Try
        mensaje()
    End Sub

    ''' <summary>
    ''' Metodo para realizar el firmado del documento
    ''' </summary>
    ''' <remarks></remarks>
    Private Sub firmar()
        Try
            Dim datosSolicitud As New DataAccesTrabajo_Altura
            Dim datosGeneral As New DataAccesGenerales
            Dim dataLogin As New dataLogin
            dataLogin = Session("Data_Login")
            Dim firmarDocumento As New DataAccesFirmarDocumento()
            firmarDocumento.ContrasenaVal = ctlDocumentoFirmar.Contrasena
            firmarDocumento.DatosCertificadoVal = ctlDocumentoFirmar.DatosCertificadoCargado
            firmarDocumento.DatosLlaveVal = ctlDocumentoFirmar.DatosLlaveCargado
            firmarDocumento.NidDocumentoVal = ctlEncabezadoDocumento.NidDocumento
            firmarDocumento.NidUsuarioVal = datosGeneral.usuarioObtieneNidUsuario(dataLogin)
            firmarDocumento.XmlBaseValue = datosSolicitud.Trabajo_Altura_CadenaOriginalXMLChilkat(Me.ctlEncabezadoDocumento.NidDocumento)
            firmarDocumento.CodigoDocumentoVal = Me.ctlEncabezadoDocumento.TextoCodigo

            If firmarDocumento.firmarDocumentoXML() = DataAccesGenerales.transaccion.terminado Then
                Dim conDoc As New DataAccesGenerales
                If conDoc.confirmarDocumento(CInt(Me.ctlEncabezadoDocumento.NidDocumento), enumEstadoDeDocumento.Aprobado, String.Empty, Session("Data_Login")) = DataAccesGenerales.transaccion.terminado Then
                    Me.ctlEncabezadoDocumento.ObtenerDocumento(Me.ctlEncabezadoDocumento.NidDocumento)
                    habilitarCampos(Me.ctlEncabezadoDocumento.EstadoDocumento)
                    Me.ctlDocumentoFirmar.CelloDigital = firmarDocumento.CadenaHASHValue
                    Me.ctlDocumentoFirmar.HabilitarFirmado = False
                    Me.ctlVentanaDialogo.MostrarMensaje(Controles_ctlVentanaDialogo.tipoMensaje.FirmaExito)
                Else
                    Me.ctlVentanaDialogo.MostrarMensaje(Controles_ctlVentanaDialogo.tipoMensaje.FirmaError)
                End If
            Else
                Me.ctlVentanaDialogo.MostrarMensaje(Controles_ctlVentanaDialogo.tipoMensaje.FirmaError)
            End If
        Catch ex As Exception
            Throw ex
        End Try
    End Sub

    ''' <summary>
    ''' Metodo para mostrar un mensaje en la pantalla
    ''' </summary>
    ''' <remarks></remarks>
    Private Sub mensaje()
        Me.ctlVentanaDialogo.Visible = True
        Me.mpePopUp.Show()
    End Sub

    ''' <summary>
    ''' Metodo para mostrar los mensajes de validacion
    ''' </summary>
    ''' <param name="mensaje"> mensaje a mostrar en pantalla</param>
    ''' <remarks></remarks>
    Public Sub mensajeValidacion(ByVal mensaje As String)
        Me.ctlVentanaDialogo.Visible = True
        Me.ctlVentanaDialogo.MensajeValidacion = mensaje
        Me.mpePopUp.Show()
    End Sub

    ''' <summary>
    ''' Metodo para verificar que los datos sean los correctos
    ''' </summary>
    ''' <returns></returns>
    ''' <remarks></remarks>
    Private Function VerificarDatos() As Boolean
        Dim str_Mensaje As String = ""
        Dim bol_valor As Boolean = False
        Try
            str_Mensaje += validar.ValidaCampo(txtFecha_Inicio, "Fecha_Inicio")
str_Mensaje += validar.ValidaCampo(txtFecha_Fin, "Fecha_Fin")
str_Mensaje += validar.ValidaCampo(cbxNidArea, "NidArea")
str_Mensaje += validar.ValidaCampo(txtLocalizacion, "Localizacion")
str_Mensaje += validar.ValidaCampo(txtDescripcion, "Descripcion")
str_Mensaje += validar.ValidaCampo(txtObservaciones, "Observaciones")
str_Mensaje += validar.ValidaCampo(txtPersona, "Persona")
str_Mensaje += validar.ValidaCampo(txtSuperintendeteObra, "SuperintendeteObra")

			
            If str_Mensaje = "" Then
                bol_valor = True
            Else
                bol_valor = False
                mensajeValidacion("Datos no validos" + Chr(13) + str_Mensaje)
            End If

        Catch ex As Exception
            bol_valor = False
            mensajeValidacion("Error en el metodo VerificarDatos(): " + ex.Message)
        End Try

        Return bol_valor
    End Function

    ''' <summary>
    ''' Metodo para ocultar las pantallas popup
    ''' </summary>
    ''' <remarks></remarks>
    Private Sub ocultarPopup()
        Me.ctlVentanaDialogo.Visible = False
        Me.ctlDocumentoFirmar.Visible = False
        Me.ctlDocumentoCancelar.Visible = False
    End Sub

	



  ''' <summary>
  ''' Metodo para llenar cbxNidArea con datos de un DataTable y seleciona el primero
  ''' </summary>
  ''' <param name="data"> Tabla con los datos</param>
  ''' <param name="nombre">Nombre de la columna de los nombres</param>
  ''' <param name="nid"> Nombre de la columna con los nid</param>
  ''' <remarks></remarks>
  Public Sub llenarcbxNidArea(ByVal data As DataTable, ByVal nombre As String, ByVal nid As String)
    Me.cbxNidArea.DataSource = data
    Me.cbxNidArea.DataTextField = nombre.ToString
    Me.cbxNidArea.DataValueField = nid.ToString
    Me.cbxNidArea.DataBind()
    Me.cbxNidArea.Items.Add("- Seleccione una opcion -")
    Me.cbxNidArea.SelectedIndex = Me.cbxNidArea.Items.Count - 1
  End Sub


















	
#End Region

End Class
